package org.dandelion.core.remote
{
	import mx.rpc.IResponder;
	import mx.rpc.events.FaultEvent;
	import mx.rpc.events.ResultEvent;
	
	import org.dandelion.config.DandelionCofig;
	import org.dandelion.cover.CoverManager;
	

	/**
	 * 
	 *	这个类实现 IResponder接口，用于处理远程调用的响应结果。
	 * 
	 **/
	public class DandelionResponder implements IResponder
	{
		/**远程调用返回处理函数*/
		private var _method:Function;
		/**远程调用错误处理函数*/
		private var _faultMethod:Function;
		/**
		 * 构造函数 
		 * method 必须指定远程调用成功的返回处理函数
		 * faultMethod 远处调用失败的处理函数，为空则调用框架配置函数
		 * */
		public function DandelionResponder(method:Function,faultMethod:Function = null)
		{
			this._method = method
			this._faultMethod = faultMethod;
		}
		/**
		 *	远程调用成功 返回的处理函数 
		 **/
		public function result(data:Object):void
		{
			CoverManager.instance.cover(false);
			var obj:Object = (data as ResultEvent).result;
			if (_method != null) _method(obj);
		}
		
		/**
		 *	远程调用出错，则调用此函数，在此函数中执行用户自定义的处理函数 ,如果在远处调用的时候设置了本次调用出错的处理函数则调用设置的函数。
		 * 否则调用框架配置的函数，如果没有配置框架统一处理函数，则框架调用默认处理函数
		 **/
		public function fault(info:Object):void
		{
			CoverManager.instance.cover(false);
			var e:FaultEvent = info as FaultEvent;
			if(_faultMethod==null) 
				DandelionCofig.faultMethod.call(null,e);
			else
				_faultMethod(e);
		}
	}
}